/**
 * 异步编程 文件操作 网络操作(ajax,request) 数据库操作
 */

// 案例1: 1s控制台输出111 2s输出222 3s输出333

// 回调地狱
// setTimeout(() => {
//   console.log(111);
//   setTimeout(() => {
//     console.log(222);
//     setTimeout(() => {
//       console.log(333);
//     }, 3000);
//   }, 2000);
// }, 1000);

// 案例1用生成器函数实现
function one() {
  setTimeout(() => {
    console.log(111);
    iterator.next();
  }, 1000);
}

function two() {
  setTimeout(() => {
    console.log(222);
    iterator.next();
  }, 2000);
}

function three() {
  setTimeout(() => {
    console.log(333);
    // iterator.next();
  }, 3000);
}

// function* gen() {
//   yield one();
//   yield two();
//   yield three();
// }

// const iterator = gen();
// iterator.next();

// 案例2 获取用户数据---->订单数据---->商品数据
function getUsers() {
  setTimeout(() => {
    const data = "用户数据";
    iterator.next(data);
  }, 1000);
}

function getOrders() {
  setTimeout(() => {
    const data = "订单数据";
    iterator.next(data);
  }, 1000);
}

function getGoods() {
  setTimeout(() => {
    const data = "商品数据";
    iterator.next(data);
  }, 1000);
}

function* gen() {
  const users = yield getUsers();
  console.log(users);
  const orders = yield getOrders();
  console.log(orders);
  const goods = yield getGoods();
  console.log(goods);
}

const iterator = gen();
iterator.next();
